Add an implementation for SetLogging Add an implementation for SetLogging so that users can control the amount of information logged in syslog at runtime. BUG=none TEST=dbus-send --print-reply --system --dest=org.chromium.ModemManager /org/chromium/ModemManager org.freedesktop.ModemManager.SetLogging string:debug Change-Id: Icd6dec0ce8d54a9e2d4ff270f75c70079d1c398d Reviewed-on: http://gerrit.chromium.org/gerrit/3889 Reviewed-by: Eric Shienbrood <ers@chromium.org> Tested-by: Jason Glasgow <jglasgow@chromium.org>
diff --git a/cromo_server.cc b/cromo_server.cc index 06bba21..e1319f9 100644 --- a/cromo_server.cc +++ b/cromo_server.cc
@@ -10,6 +10,7 @@ #include <dbus/dbus.h> #include <glog/logging.h> #include <mm/mm-modem.h> +#include <syslog.h> #include "carrier.h" #include "modem_handler.h" @@ -23,6 +24,7 @@ static const char* kDBusInterface = "org.freedesktop.DBus"; static const char* kDBusPath = "/org/freedesktop/DBus"; static const char* kDBusListNames = "ListNames"; +static const char* kDBusInvalidArgs = "org.freedesktop.DBus.Error.InvalidArgs"; // Returns the current time, in milliseconds, from an unspecified epoch. // TODO(ellyjones): duplicated in some plugins. Figure out how to refactor that. @@ -71,6 +73,28 @@ return allpaths; } +void CromoServer::SetLogging(const std::string& level, DBus::Error& error) { + int mask = 0; + const char *cstr = level.c_str(); + + if (strcasecmp(cstr, "debug") == 0) { + mask = LOG_UPTO(LOG_DEBUG); + } else if (strcasecmp(cstr, "info") == 0) { + mask = LOG_UPTO(LOG_INFO); + } else if (strcasecmp(cstr, "warn") == 0) { + mask = LOG_UPTO(LOG_WARNING); + } else if (strcasecmp(cstr, "error") == 0) { + mask = LOG_UPTO(LOG_ERR); + } else { + std::string msg(std::string("Invalid Logging Level: ") + level); + LOG(ERROR) << msg; + error.set(kDBusInvalidArgs, msg.c_str()); + return; + } + setlogmask(mask); + LOG(INFO) << "logging level set to: " << level; +} + void CromoServer::AddModemHandler(ModemHandler* handler) { LOG(INFO) << "AddModemHandler(" << handler->vendor_tag() << ")"; modem_handlers_.push_back(handler); diff --git a/cromo_server.h b/cromo_server.h index f81a453..fe31a7c 100644 --- a/cromo_server.h +++ b/cromo_server.h
@@ -46,7 +46,7 @@ // ModemManager DBUS API methods. std::vector<DBus::Path> EnumerateDevices(DBus::Error& error); void ScanDevices(DBus::Error& error) {} - void SetLogging(const std::string& level, DBus::Error& error) {} + void SetLogging(const std::string& level, DBus::Error& error); static const char* kServiceName; static const char* kServicePath; diff --git a/main.cc b/main.cc index 495c4b8..beb955f 100644 --- a/main.cc +++ b/main.cc
@@ -111,6 +111,7 @@ openlog("cromo", LOG_PID, // Options LOG_LOCAL3); // 5,6,7 are taken + setlogmask(LOG_UPTO(LOG_INFO)); } virtual void send(LogSeverity severity, const char* full_filename,